/*!
 * Node-traversal module v1.0.0 of jRaiser javascript library
 * http://code.google.com/p/jraiser/
 *
 * Author: Heero.Luo
 * Licensed under MIT license
 *
 * Date: Mon Jun 04 2012 15:40:45 GMT+0800
 */
define(function(require, exports, module) { 'use strict';
 
module.exports = {
	/**
	 * node模块扩展
	 */
	nodeApis : {
		/**
		 * 获取当前所有节点的子节点
		 * @return {NodeList} 包含当前所有节点的子节点的NodeList集合
		 */
		children : function() {
			var ret = [ ];
		
			this.forEach(function(elt) {
				var child = elt.firstChild;
				while (child) {
					if (child.nodeType === 1) {
						ret.push(child);
					}
					child = child.nextSibling;
				}
			});
			
			ret = new this.constructor(ret);
			if (ret.length > 1) { ret.uniqueSort(); }

			return ret;
		},
		
		/**
		 * 获取当前所有节点的下一个相邻节点
		 * @return {NodeList} 包含当前所有节点的下一个相邻节点的NodeList集合
		 */
		next : function() {
			var ret = [ ];
			
			this.forEach(function(elt) {
				while (true) {
					elt = elt.nextSibling;
					if (elt) {
						if (elt.nodeType === 1) {
							ret.push(elt);
							break;
						}
					} else {
						break;
					}
				}
			});
			
			return new this.constructor(ret);
		},
		
		/**
		 * 获取当前所有节点的上一个相邻节点
		 * @return {NodeList} 包含当前所有节点的上一个相邻节点的NodeList集合
		 */
		prev : function() {
			var ret = [ ];
			
			this.forEach(function(elt) {
				while (true) {
					elt = elt.previousSibling;
					if (elt) {
						if (elt.nodeType === 1) {
							ret.push(elt);
							break;
						}
					} else {
						break;
					}
				}
			});
			
			return new this.constructor(ret);
		},
		
		/**
		 * 获取当前所有节点的父节点
		 * @return {NodeList} 包含当前所有节点的父节点的NodeList集合
		 */
		parent : function() {
			var ret = [ ];
			
			this.forEach(function(elt) {
				ret.push(elt.parentNode);
			});
			
			return new this.constructor(ret);
		}
	}
};

});